﻿#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>


//将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 
//
//示例 1：
//
//输入：l1 = [1, 2, 4], l2 = [1, 3, 4]
//输出：[1, 1, 2, 3, 4, 4]
//示例 2：
//
//输入：l1 = [], l2 = []
//输出：[]
//示例 3：
//
//输入：l1 = [], l2 = [0]
//输出：[0]

struct ListNode {
	int val;
	struct ListNode* next;
};


struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
	if (!l1)
	{
		return l2;
	}
	if (!l2)
	{
		return l1;
	}
	struct ListNode* pnew = NULL;
	struct ListNode* tail = pnew;
	if (l1->val < l2->val)
	{
		pnew = tail = l1;
		l1 = l1->next;
	}
	else
	{
		pnew = tail = l2;
		l2 = l2->next;
	}
	while (l1 && l2)
	{
		if (l1->val < l2->val)
		{
			tail->next = l1;
			tail = tail->next;
			l1 = l1->next;
		}
		else
		{
			tail->next = l2;
			tail = tail->next;
			l2 = l2->next;
		}
	}
	if (l1 == NULL)
	{
		tail->next = l2;
	}
	else
	{
		tail->next = l1;
	}
	return pnew;

}
